﻿#pragma once
#ifndef XL_XEXPAND_DWEBX_WOREQUESTER_H
//@隐藏{
#define XL_XEXPAND_DWEBX_WOREQUESTER_H
#ifdef WEBOAT_EXPORTS
#include "pch.h"
#include "module_WebOat.h"

#else

#endif
//@隐藏}

//@别名 Wo传入请求类
class WEBOAT_MODIFICATION WoHTTPIncomingRequestClass
{
private:
	WoHTTPIncomingRequestPtr m_IncomingRequest;
	//WoHTTPContext* m_context;
public:
	//@隐藏{
	WoHTTPIncomingRequestClass() {};
	WoHTTPIncomingRequestClass(const WoHTTPIncomingRequestPtr& ptr, WoHTTPContext* ctx) {
		m_IncomingRequest = ptr; //m_context = ctx;
	};
	~WoHTTPIncomingRequestClass() {};
	void operator=(WoHTTPIncomingRequestPtr& ptr) { m_IncomingRequest = ptr; };
	//void operator=(WoHTTPContext* ctx) { m_context = ctx; };
	operator WoHTTPIncomingRequestPtr& () { return m_IncomingRequest; };
	//@隐藏}

	//@参数 参数名 如:/user/{userId} ,则:"userId"
	//@别名 取路径参数(参数名)
	CXTextA GetPathVariable(const char* name) { return WoRequestGetPathVariable(m_IncomingRequest, name); };
	//@备注 取出所有路径变量
	//@参数 返回数据 例如 /delete/{name}/{id} -> /delete/huiyi/1 ,取回 map{"name":"huiyi","id":"1"}
	//@别名 取所有路径参数(返回数据)
	void GetPathVariables(CXMap<CXTextA, CXTextA>& rmap) {
		WoRequestGetPathVariables(m_IncomingRequest, rmap);
	};

	//@别名 取路径()
	CXTextA GetPath() {
		return WoRequestGetPath(m_IncomingRequest);
	}
	//@参数 键名 例如:"user-agent"
	//@别名 取请求头(键名)
	CXTextA GetHander(const char* key) {
		return WoRequestGetHeader(m_IncomingRequest, key);
	};
	//@参数 用于接收所有请求头的字典
	//@别名 取所有请求头(返回数据)
	void GetHanders(CXMap<CXTextA, CXTextA>& rmap) {
		WoRequestGetHeaders(m_IncomingRequest, rmap);
	}
	//@备注 快速获取请求头中的JWT文本
	// .例如: 当 参数[请求头]="Authorization"
	// .当 参数[前缀]="Bearer"时
	// 对应: Authorization: Bearer JWTSTR
	//@别名 取请求头中JWT文本(请求指针,请求头,前缀)
	CXTextA GetJWTAuthStr(const char* hander = "Authorization", const char* prefix = "Bearer") {
		return WoRequestGetJWTAuthStr(m_IncomingRequest, hander, prefix);
	}

	//@别名 取查询参数(参数名)
	CXTextA GetQueryParameter(const char* name) { return WoRequestGetQueryParameter(m_IncomingRequest, name); };

	//@备注 例如 /path?id=1 返回 "?id=1"
	//@别名 取路径尾()
	CXTextA GetPathTail() {
		return WoRequestGetPathTail(m_IncomingRequest);
	};

	//@别名 Body_到文本(返回文本)
	void GetBodyToString(CXTextA& str) {
		WoRequestGetBodyToString(m_IncomingRequest, str);
	}
	//@别名 Body_到字节集(返回字节集)
	void GetBodyToByte(CXBytes& str) {
		WoRequestGetBodyToByte(m_IncomingRequest, str);
	}
};


#endif
